"""
1、设置一个函数，该函数的功能是将给定坐标点进行旋转、平移或放缩变换
2、利用1中的函数对你所做的简笔画进行向右平移15像素，
    以图像为中心点缩小至原始图像的0.75倍，然后以图像中心为中心旋转30度，然后输出
"""
#导入库
import numpy as np
import matplotlib.pyplot as plt
import math as math

#旋转
# @param x: x坐标
# @param y: y坐标
# @param theta: 旋转角度
# @param x0: 旋转中心x坐标
# @param y0: 旋转中心y坐标
def rotate(x, y, theta, x0, y0):
    t0 = x
    t1 = y

    x1 = t0 * math.cos(theta) - t1 * math.sin(theta) + x0 * (1 - math.cos(theta)) + y0 * math.sin(theta)
    y1 = t0 * math.sin(theta) + t1 * math.cos(theta) + y0 * (1 - math.cos(theta)) - x0 * math.sin(theta)

    return [x1, y1]



# 平移变换
# @param x: x坐标
# @param y: y坐标
# @param dx: x方向平移距离
# @param dy: y方向平移距离
def translate(x, y, dx, dy):
    x1 = x + dx
    y1 = y + dy

    return [x1, y1]



# 比例变换
# @param x: x坐标
# @param y: y坐标
# @param sx: x方向缩放比例
# @param sy: y方向缩放比例
# @param x0: 缩放中心x坐标
# @param y0: 缩放中心y坐标
def scale(x, y, sx, sy, x0, y0):
    t0 = x
    t1 = y

    x1 = sx * t0 + x0 * (1 - sx)
    y1 = sy * t1 + y0 * (1 - sy)

    return [x1, y1]



if __name__ == '__main__':
    # 创建一个全为0的二维数组
    img = np.zeros([50, 50, 3], dtype=np.uint8)

    img[:, :, :] = [255, 255, 255]

    img[10][10] = [0, 0, 0]

    # 红色旋转

    p1 = rotate(10, 10, math.pi/6, 20, 20)
    img[int(p1[0])][int(p1[1])] = [255, 0, 0]
    
   

    # 绿色平移
    p2 = translate(10, 10, 10, 10)
    img[int(p2[0])][int(p2[1])] = [0, 255, 0]

    # 蓝色缩放
    p3 = scale(10, 10, 3, 3, 0, 0)
    img[int(p3[0])][int(p3[1])] = [0, 0, 255]

    # 由于imshow默认的坐标系是左上角为原点，所以需要转换一下
    img = np.transpose(img, (1, 0, 2))
    plt.imshow(img, origin='lower')
    plt.legend()
    plt.title('MyImage')
    plt.show()

